/*
题目：输入一个整数，输出每个数字对应的拼音。当整数为负数时，首先输出fu，后面一
样。十个数字对应的拼音如下：
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式：
输入在一行中给出一个整数，如：1234。
提示：整数包括负数、零和正数。
输出格式：
在一行中输出这个整数对应的拼音，每个数字的拼音之间用空格分开，行末最后没有空格。
如 yi er san si。
输入样例：
-600
输出样例：
fu liu ling ling
*/
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <stdbool.h>  
  
#define MAX_LENGTH 100   //定义数组大小 
  
//定义字符串数组，这里用到了const
const char *digits_to_pinyin[10] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"  }; 
  
int main() {  
    char num_str[MAX_LENGTH];  
    bool is_negative = false;  //这里用到了布尔变量 注意在stdbool.h中bool等价于_Bool，同时ture = 1 false = 0
  
    if (scanf("%s", num_str) != 1) {  
        fprintf(stderr, "Error reading input.\n");  
        exit(EXIT_FAILURE); 
    }

    if (num_str[0] == '-') {    //此处考虑的就是如果输入数组num_str的首元素如果是'-'
        is_negative = true;     //首先重新定义布尔变量为真，因为下面循环要用到，添加“fu”
        memmove(num_str, num_str + 1, strlen(num_str) - 1);
        num_str[strlen(num_str) - 1] = '\0';    
        /*使用 memmove 函数来移动字符串的内容。
        它将 num_str 中从第二个字符（即 num_str + 1）开始的内容移动到 num_str 的开始位置，覆盖原来的负号。
        移动的长度是 strlen(num_str) - 1，即字符串的长度减去1（因为要去除负号）。*/
    }  
  
    if (is_negative) {   //此处添加了“fu”
        printf("fu ");  
    }  
  
    for (int i = 0; num_str[i] != '\0'; i++) {   //开始循环，直到遇到字符串的结束符'\0'
        if (num_str[i] < '0' || num_str[i] > '9') {  
            fprintf(stderr, "Input contains non-digit characters.\n");  
            exit(EXIT_FAILURE); 
        }
        printf("%s", digits_to_pinyin[num_str[i] - '0']);   
        if (num_str[i + 1] != '\0') {  //此处是为了检查本元素是不是数组中的最后一个元素，如果不是加个空格
            printf(" ");  
        }  
    }  
  
    printf("\n"); 
  
    return 0;  
}